const CryptoJS = require('crypto-js');

function generateSign(data) {
    const sortedKeys = Object.keys(data).sort();
    let signStr = '';

    sortedKeys.forEach(key => {
        signStr += key + '=' + data[key] + '&';
    });

    signStr = signStr.slice(0, -1); // 去除末尾的 '&'

    const md5Str = CryptoJS.MD5(signStr).toString().toUpperCase(); // 对拼接后的字符串进行 MD5 编码并转为大写

    const finalStr = md5Str + 'code=MrRRC&'; // 在 MD5 编码后的字符串尾部拼接验证码密钥
    const sign = CryptoJS.MD5(finalStr).toString().toUpperCase(); // 再次对拼接后的字符串进行 MD5 编码并转为大写

    data['sign'] = sign; // 将生成的签名字符串添加到参数字典中

    return data;
}

// 测试
const data = { "a": "a", "b": "b" };
const signedData = generateSign(data);
console.log(signedData);